/*
Given an array of integers, every element appears twice except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
*/

class Solution {
public:
    int singleNumber(int A[], int n) {
        int x = 0;
        for (int i = 0; i < n; i++) {
            x ^= A[i];
        }
        return x;
    }
};

#if 0
class Solution {
public:
    int singleNumber(int A[], int n) {
        double sum = 0;
        unordered_set<int> numset;
        for (int i = 0; i <n; i++) {
            auto res = numset.insert(A[i]);
            sum += (res.second)?(A[i]):(-A[i]);
        }
        return (int)sum;
    }
};
#endif
